# -*- coding: utf_8 -*-
# @Create   : 2021/9/1 14:32
# @Author   : yh
# @Remark   : 巡检记录Model层
import datetime
import time

from mxsoftpy import Model
from pydantic import constr, validator

from utils.parser.fields import check_time_str


class InspectionRecordModel(Model):
    """
    巡检记录模型
    <<< !!!数据库表插入数据库时需要按字段顺序，所以此字段顺序不要改变!!! >>>
    """
    task_code: str     # 所属巡检任务code
    video_code: str    # 检测的视频code
    test_code: str     # 检测项目code
    test_value: float  # 检测值
    test_state: int    # 检测状态 0：未知、1：正常、3：故障
    test_time: int = int(time.time())


class InspectionRecordSelectModel(Model):
    """
    巡检记录查询参数模型
    """
    begin_time: str = '1999-10-01 00:00'                      # 开始时间
    end_time: str = (datetime.datetime.now() +
                     datetime.timedelta(weeks=36)).strftime('%Y-%m-%d %H:%M')                         # 结束数据
    device_name: constr(max_length=50) = ''  # 设备名称
    device_ip: str = ''                      # 设备网络地址
    test_code: str = ''                      # 检测项目code
    test_state: str = ''                     # 检测结果
    task_name: constr(max_length=50) = ''    # 任务名称
    video_code: str = ''                     # 设备code
    task_code: str = ''                      # 任务code
    plan_code: str = ''                      # 任务来源
    pagesize: int = 10                       # 分页每页个数
    pageindex: int = 1                       # 分页页数

    # 校验时间字符串是否符合时间格式
    _check_time = validator('begin_time', 'end_time', allow_reuse=True)(check_time_str)

    @validator('test_code')
    def check_code(cls, value):
        if value:
            assert value.isdigit(), '错误的检查项目code，无法转为int'
        return value

    @validator('test_state')
    def check_value(cls, value):
        if value:
            assert value.isdigit(), '错误的检测值，无法转为int'
            return int(value)
